import { getCartTotalAPI } from '../apis/cart'
import { store } from '../store/store'

/**
 * 获取当前页面实例
 * @returns
 */
const getPage = () => {
  // 获取当前页面栈数组
  const pages = getCurrentPages()
  // 获取当前页面实例
  const page = pages[pages.length - 1]
  // 返回当前页面实例
  return page
}

/**
 * 获取上一页的页面实例
 * @returns
 */
const getPrevPage = () => {
  // 获取当前页面栈数组
  const pages = getCurrentPages()
  // 获取上一页的页面实例
  const page = pages[pages.length - 2]
  // 返回上一页的页面实例
  return page
}

/**
 * 判断当前页面是否是 tabbar 页面之一
 * @param {*} pagePath
 * @returns {Boolean} true 是 false 否
 */
const isTabBarPage = (pagePath = '') => {
  // 考虑通用性，内部去除首位的斜杠方便判断
  if (pagePath.startsWith('/')) {
    pagePath = pagePath.replace('/', '')
  }
  // tabBar 页面路径
  const tabBarPages = [
    'pages/index/index',
    'pages/category/category',
    'pages/cart/cart',
    'pages/my/my',
  ]
  // 获取当前页面栈
  const page = getPage()
  // 判断当前页面是否是 tabbar 页面之一
  return tabBarPages.includes(pagePath || page.route)
}

/**
 * 对象转URL
 * @param {object} obj
 */
const urlEncode = (obj = {}) => {
  // 参数数组
  const params = []
  // 遍历对象
  for (let key in obj) {
    // 判断是否是自身属性
    if (obj.hasOwnProperty(key)) {
      // 添加参数
      params.push(`${key}=${obj[key]}`)
    }
  }
  // 返回参数
  return params.join('&')
}

/**
 * 设置购物车 tabBar 数量
 * 该方法只能在 tabbar 页面中调用, 其他页面调用无效
 * @param {*} count
 */
const setTabBarCount = async (cartTotal) => {
  // 未登录或者非 tabBar 页直接退出
  if (!store.isLogin || !isTabBarPage()) return
  // 购物车的 tabBar 下标为2
  const cartIndex = 2
  // 如果没有传递购物车数量，则通过请求获取
  if (cartTotal === undefined) {
    // 获取购物车数量
    const res = await getCartTotalAPI()
    cartTotal = res.data.cartTotal
  }
  // 判断数量是否大于0
  if (cartTotal > 0) {
    // 设置购物车数量
    wx.setTabBarBadge({
      index: cartIndex,
      text: cartTotal > 99 ? '99+' : cartTotal.toString(),
    })
  } else {
    // 移除购物车数量
    wx.removeTabBarBadge({ index: cartIndex })
  }
}

// 导出工具函数
export { getPage, getPrevPage, isTabBarPage, urlEncode, setTabBarCount }
